package module01_work;

import java.util.Scanner;


/**
 * 
 * @author 陈洛健
 *需求：利用二维数组打印棋盘
 *使用int的二维数组存放数据 考虑到超过10的话使用英文字母，所以在插入元素的时候，利用if判断后， 超过10的话使用ASCII码的中英文字母的映射代替
 *只要在打印出棋盘的时候强转就可以实现棋盘的符号以及英文字母
 *
 */
public class Work05 {

	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入需要棋盘的大小（15以内吧~）：");
		int size = sc.nextInt();
		
		int[][] arr = createChessManual(size);
		
		printChessManual(arr);
		
	}

	/**
	 * 生成二维数组 用于打印棋盘
	 * @param size 二维数组长度
	 * @return 用于生成棋盘的二维数组
	 */
	public static int[][] createChessManual(int size) {
		int[][] arr = new int[size][size];
		arr[0][0] = 32;
		for(int i = 1;i<arr.length;i++) {
			if(i<10) {
				arr[i][0] = i;
				
			}else {
				arr[i][0] = i+87;
			}
			if(i<10) {
				arr[0][i] = i;
				
			}else {
				arr[0][i] = i+87;
			}
		}
		for(int i = 1;i<arr.length;i++) {
			for(int j = 1;j<arr[i].length;j++) {
				arr[i][j] = 43;
			}
		}
		return arr;
		
	}
	/**
	 * 生成棋盘的方法 左上角第一个为止由于是空格 单独打印
	 * 使用一个for循环打印arr[0][]中的所有元素作为第一行
	 * 再使用两层的嵌套for循环打印其余棋盘 值得注意的是 超过10 的过使用英文字母代替，利用ASCII码生成字符 中心的棋盘符号也一样设计
	 * @param 用于生成棋盘的二维数组
	 */
	public static void printChessManual(int[][] arr) {
		System.out.print((char) arr[0][0]+" ");
		
		for (int j = 1; j < arr[0].length; j++) {
			if (j < 10) {
				System.out.print(arr[0][j]+" ");
			}else {
				System.out.print((char)arr[0][j]+" ");
			}
		}
		
		for (int i = 1; i < arr.length; i++) {
			System.out.println();

			for (int j = 0; j < arr[i].length; j++) {
				if(j == 0) {
					if(i>9) {
						System.out.print((char)arr[i][j]+" ");
					}else {
					System.out.print(arr[i][j]+" ");
					}	
				}else {
					System.out.print((char)arr[i][j]+" ");
				}
			}
		}

	}
}
